﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using SIPDTO;

namespace SIP
{
    public partial class Distrito : System.Web.UI.Page
    {
        #region ** Declaración de variables

        private string _valparametro = "Parametro Distrito";
        SIPBLL.SIPBLL _bll = new SIPBLL.SIPBLL();
        dtoDistrito _dtodistrito = new dtoDistrito();
        dtoProvincias _dtoprovincia = new  dtoProvincias();
        dtoError _resp = new dtoError();
        dtoParametros _dtoparametro = new dtoParametros();
        dtoCanton _dtocanton = new dtoCanton();
        List<dtoParametros> _dtparametro = new List<dtoParametros>();
        List<dtoProvincias> _dtprovincia = new List<dtoProvincias>();
        List<dtoCanton> _dtcanton = new List<dtoCanton>();
        List<dtoDistrito> _dtdistrito = new List<dtoDistrito>();

        #endregion

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                ObtenerProvincia();
                
                if (Convert.ToBoolean(Session["Crear"]) == true)
                {
                    ActivarBotones();
                    // método para obtener de una tabla el consecutivo de canton.
                    lblcodigo.Text = Convert.ToString(ObtenerParametro());
                    CleanControl(this.Controls);

                }
                else
                {

                    BuscarDistrito();
                }
            }
           
        }

        /// <summary>
        /// Método encargado de guardar y actualizar la información de los distritos
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Registrar(object sender, EventArgs e)
        {
            try
            {
                if (Page.IsValid == true)
                {
                    if (Convert.ToBoolean(Session["Crear"]) == true)
                    {
                        if ((Convert.ToInt16((ddlCanton).SelectedValue) != 0) || (Convert.ToInt16((ddlProvincia).SelectedValue) != 0))
                        {
                            // método para obtener de una tabla el consecutivo de Distrito.
                            _dtodistrito.Identificacion = ObtenerParametro();
                            _dtodistrito.Descripcion = this.txtNombre.Text;
                            _dtodistrito.Canton = Convert.ToInt16(ddlCanton.SelectedValue);
                            if (chkactivo.Checked == true)
                            {
                                _dtodistrito.Estado = true;
                            }
                            else
                            {
                                _dtodistrito.Estado = false;
                            }
                            // se crea el distrito en la tabla Distritos
                            _resp = _bll.AceptarDistrito(_dtodistrito,1);
                            CleanControl(this.Controls);
                            if (_resp.IdError == 100)
                            {
                                WebMsgBox.Show(_resp.Mensaje);
                                ActualizaParametro();// Se actualiza el parametro del consecutivo del distrito
                                lblcodigo.Text = Convert.ToString(ObtenerParametro());
                            }
                            else
                            {
                                WebMsgBox.Show(_resp.Mensaje);
                            }
                        }
                        else { WebMsgBox.Show("Exiten campos pendientes de completar, por favor verifique la Provincia y el Cantón"); }
                    }
                    else // actualiza la información del distrito
                    {
                        _dtodistrito.Identificacion = Convert.ToInt16(lblcodigo.Text);
                        _dtodistrito.Descripcion = this.txtNombre.Text;
                       _dtodistrito.Canton = Convert.ToInt16(ddlCanton.SelectedValue);
                        if (chkactivo.Checked == true)
                        {
                            _dtodistrito.Estado = true;
                        }
                        else
                        {
                            _dtodistrito.Estado = false;
                        }
                        // se modifica el distrito en la tabla Distrito
                        _resp = _bll.AceptarDistrito(_dtodistrito,2);

                        if (_resp.IdError == 100)
                        {
                            WebMsgBox.Show(_resp.Mensaje);
                            Response.Redirect("ListadoDistritos.aspx");
                        }
                        else
                        {
                            WebMsgBox.Show(_resp.Mensaje);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                _resp.IdError = -100;
                _resp.Mensaje = ex.Message.ToString();
                WebMsgBox.Show(_resp.Mensaje);
            }

        }

        /// <summary>
        /// Retorna al listado de Distritos
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Cancelar(object sender, EventArgs e)
        {
            Response.Redirect("ListadoDistritos.aspx"); 

        }

        /// <summary>
        /// Obtiene la información del canton y lo carga en pantalla
        /// </summary>
        private void BuscarDistrito() 
        {
           DesactivarTodosBotones();
            _dtodistrito.Identificacion = Convert.ToInt16(Session["idDistrito"]);
            _dtdistrito = _bll.ObtenerDistrito(_dtodistrito);
            lblcodigo.Text = Convert.ToString(_dtdistrito[0].Identificacion);
            txtNombre.Text = _dtdistrito[0].Descripcion;
            ObtenerCanton(); // Carga el canton asignado al distrito

            _dtcanton = _bll.ObtenerCanton(_dtocanton);// Se obtiene la provincia asignada al canton
            ddlCanton.SelectedValue = Convert.ToString(_dtcanton[0].Identificacion);

            _dtoprovincia.Identificacion = _dtcanton[0].Provincia;
            _dtprovincia = _bll.ObtenerProvincia(_dtoprovincia);
            ddlProvincia.SelectedValue = Convert.ToString(_dtprovincia[0].Identificacion);

            if (Convert.ToBoolean(_dtdistrito[0].Estado) == true)
            {
                chkactivo.Checked = true;
            }
            else
            {
                chkactivo.Checked = false;
            }

        }


        protected void ddlProvincia_SelectedIndexChanged(object sender, EventArgs e)
        {
            ObtenerCanton();
        }

        #region ** Consecutivo Distrito

        public int ObtenerParametro()
        {

            _dtparametro = _bll.ObtenerParametro(_valparametro);
            if (Convert.ToInt32(_dtparametro[0].Valor) == 0) //valida si el parametro es 0 y lo inicializa a 1
            { _dtodistrito.Identificacion = Convert.ToInt32(_dtparametro[0].Valor) + 1; }
            else
            {
                _dtodistrito.Identificacion = Convert.ToInt32(_dtparametro[0].Valor+1);
            }
            return _dtodistrito.Identificacion;

        }

        public void ActualizaParametro()
        {
            //Actualizar la tabla Parametro
            _dtparametro = _bll.ObtenerParametro(_valparametro);
            _dtoparametro.IdParametro = _dtparametro[0].IdParametro;
            _dtoparametro.Descripcion = _dtparametro[0].Descripcion;
            _dtoparametro.Valor = _dtparametro[0].Valor + 1;
            _resp = _bll.RegistrarParametro(_dtoparametro,2);
        }

        #endregion

        #region ** Validaciones

        public void CleanControl(ControlCollection controles)
        {
            foreach (Control control in controles)
            {
                if (control is TextBox)
                    ((TextBox)control).Text = string.Empty;
                else if (control is DropDownList)
                    ((DropDownList)control).ClearSelection();
                else if (control is RadioButtonList)
                    ((RadioButtonList)control).ClearSelection();
                else if (control is CheckBoxList)
                    ((CheckBoxList)control).ClearSelection();
                else if (control is RadioButton)
                    ((RadioButton)control).Checked = false;
                else if (control is CheckBox)
                    ((CheckBox)control).Checked = false;
                else if (control.HasControls())   //Esta linea detécta un Control que contenga otros Controles                    
                    //Así ningún control se quedará sin ser limpiado.                   
                    CleanControl(control.Controls);
            }
        }

        public void ActivarBotones()
        {
            ddlProvincia.Enabled = true;
            txtNombre.Enabled = true;
            chkactivo.Enabled = true;
            ddlCanton.Enabled = true;

        }

        public void DesactivarTodosBotones()
        {
            ddlProvincia.Enabled = false;
            txtNombre.Enabled = true;
            chkactivo.Enabled = true;
            ddlCanton.Enabled = false;
        }

        #endregion

        #region ** Llenado de combos

        public void ObtenerProvincia()
        {
            _dtprovincia = _bll.ObtenerProvincia();
            ddlProvincia.DataSource = _dtprovincia;
            ddlProvincia.DataValueField = "Identificacion";
            ddlProvincia.DataTextField = "Descripcion";
            ddlProvincia.DataBind();
            ddlProvincia.Items.Insert(0, new ListItem("Seleccionar Provincia", "0"));
        }

        public void ObtenerCanton()
        {
            if (Convert.ToBoolean(Session["Crear"]) == true)
            {
                _dtocanton.Provincia = Convert.ToInt16(ddlProvincia.SelectedValue);
                _dtcanton = _bll.ObtenerCantonxProvincia(_dtocanton);
                ddlCanton.Enabled = true;
                ddlCanton.DataSource = _dtcanton;
                ddlCanton.DataValueField = "Identificacion";
                ddlCanton.DataTextField = "Descripcion";
                ddlCanton.DataBind();
                ddlCanton.Items.Insert(0, new ListItem("Seleccionar Cantón", "0"));
            }
            else 
            {
                _dtodistrito.Identificacion = Convert.ToInt16(Session["idDistrito"]);
                _dtdistrito = _bll.ObtenerDistrito(_dtodistrito);
                _dtocanton.Identificacion = _dtdistrito[0].Canton;// Se obtiene el canton asignado al distrito
                _dtcanton = _bll.ObtenerCanton(_dtocanton);
                ddlCanton.DataSource = _dtcanton;
                ddlCanton.DataValueField = "Identificacion";
                ddlCanton.DataTextField = "Descripcion";
                ddlCanton.DataBind();
            
            }

        }

        #endregion



    }


    }